package cn.com.zero.file.service;

import cn.com.zero.file.vo.FileInfo;
import org.springframework.core.io.Resource;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author liuxh
 * @version 1.0.0
 * @Description 文件服务器接口
 * @createTime 2022/9/13
 */
public interface IFileService {

    /**
     * 直接上传公共文件（公共读）
     *
     * @param file         文件
     * @param relativePath 相对路径
     * @return 文件信息
     */
    FileInfo upload(MultipartFile file, String relativePath);

    /**
     * 上传文件
     *
     * @param file         文件
     * @param bucketName   存储桶
     * @param relativePath 相对路径
     * @return 文件信息
     */
    FileInfo upload(MultipartFile file, String bucketName, String relativePath);

    /**
     * 压缩并上传图片<br/>
     * 如果宽、高只传一个值时，另一个按等比压缩；如果两个都有传值，则按要求压缩；
     *
     * @param file         图片流
     * @param bucketName   存储桶名称
     * @param relativePath 图片存放的相对路径
     * @param width        指定压缩后图片的宽
     * @param height       指定压缩后图片的高
     * @return 文件信息
     */
    FileInfo uploadImage(MultipartFile file, String bucketName, String relativePath, Integer width, Integer height);

    /**
     * 删除指定文件    自定义的公共存储桶
     *
     * @param relativeFilePath 文件相对路径
     */
    void delete(String relativeFilePath);


    /**
     * 删除指定文件
     *
     * @param bucketName       存储桶名
     * @param relativeFilePath 文件相对路径
     */
    void delete(String bucketName, String relativeFilePath);


    /**
     * 查看文件是否存在     自定义的公共存储桶
     *
     * @param relativeFilePath 文件相对路径
     * @return 是否存在 true：是 false：否
     */
    Boolean isExist(String relativeFilePath);

    /**
     * 查看文件是否存在
     *
     * @param bucketName       存储桶名
     * @param relativeFilePath 文件相对路径
     * @return 是否存在 true：是 false：否
     */
    Boolean isExist(String bucketName, String relativeFilePath);


    /**
     * 下载文件
     *
     * @param bucketName       存储桶名
     * @param relativeFilePath 文件相对路径
     * @return Resource
     */
    Resource downloadFile(String bucketName, String relativeFilePath);

    /**
     * 下载文件并转换为Base64
     *
     * @param bucketName       存储桶名
     * @param relativeFilePath 文件相对路径
     * @return 转换为Base64后的文件
     */
    String downloadFileToBase64(String bucketName, String relativeFilePath);
}
